#include "pilha_estatica.h"

struct pilha {
    int no[MAX];
    int topo;
};

Pilha cria_pilha()
{
    Pilha p;
    p = (Pilha) malloc(sizeof(struct pilha));

    if(p != NULL)
        p->topo = -1;
    return p;
}

int pilha_vazia(Pilha p)
{
    if(p->topo == -1)
        return 1;
    else
        return 0;
}

int pilha_cheia(Pilha p)
{
    if(p->topo == MAX-1)
        return 1;
    else
        return 0;
}

int push(Pilha p, int elem)
{
    if(p == NULL || pilha_cheia(p))
        return 0;

    /* Insere o elemeento */
    p->topo++;
    p->no[p->topo] = elem;
    return 1;
}

int pop(Pilha p, int *elem)
{
    if(p == NULL || pilha_vazia(p))
        return 0;

    *elem = p->no[p->topo]; // Retorna o elemento
    p->topo--; //Remove o elemento do topo

    return 1;
}

int le_topo(Pilha p, int *elem)
{
    if(p == NULL || pilha_vazia(p))
        return 0;

    *elem = p->no[p->topo];
    return 1;
}

int imprime_lista(Pilha p)
{
    int i;
    printf("Lista:\n\t{ ");
    for(i = p->topo;i != -1;i--)
        printf("%d ", p->no[i]);
    printf("}\n");

    return 1;
}

int imprime_reverso(Pilha p)
{
    int i;

    printf("Lista em ordem inversa:\n\t{ ");
    for(i = 0;i <= p->topo;i++)
        printf("%d ", p->no[i]);
    printf("}\n");

    return 1;
}

